package br.com.sbc.sessionBean;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.sbc.ejb.entity.Usuario;

@Stateless
public class UsuarioSessionBean {
	
	
	private Usuario usuario;
	protected javax.mail.Session session;
	
	
	@PersistenceContext
	private EntityManager entityManager;
	
	public void cadastrarUsuario(Usuario usuario){
		this.entityManager.persist(usuario);
	}
	
	public void alterarUsuario(Usuario usuario) {
		this.entityManager.merge(usuario);
	}
	
	public Usuario consultaPorEmail(String email) {
		Query query = entityManager.createNamedQuery("Usuario.consultarPorEmail");
		query.setParameter("email", email);
		try { 
			return (Usuario) query.getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}
	
 	public Usuario consultaUsuarioPorNome(String nome) {
		Query query = entityManager.createNamedQuery("Usuario.consultarPorNome");
		query.setParameter("nome", nome);
		try {
			return  (Usuario) query.getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}
 	@SuppressWarnings("unchecked")
	public List<Usuario> consultaPorNomeLista(String nome) {
		Query query = entityManager.createNamedQuery("Usuario.consultarPorNome");
		query.setParameter("nome", nome + "%");
		try {
			return  query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> consultaPorEmailLista(String email) {
		Query query = entityManager.createNamedQuery("Usuario.consultarPorEmail");
		query.setParameter("email", email);
		try {
			return  query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> consultaTodosUsuarios( ) {
		Query query = entityManager.createNamedQuery("Usuario.consultarTodos");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Usuario> consultaUsuarioPorNomeComplete(String digitado) {
		Query query = entityManager.createNamedQuery("Usuario.consultarUsuarioPorNomeComplete");
		query.setParameter("digitado", digitado + "%");
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Usuario> consultaUsuarioPorEmailComplete(String digitado) {
		Query query = entityManager.createNamedQuery("Usuario.consultarUsuarioPorEmailComplete");
		query.setParameter("digitado", digitado + "%");
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	
	public boolean validarLogin(String email, String password) {
		Usuario usuario= consultaPorEmail(email);
		this.usuario = usuario;
		if (usuario != null && usuario.getSenha().equals(password)) {
			return true;
		}
		return false;
	}
	
	public void save(Usuario usuario){
		this.entityManager.persist(usuario);
	}
	
	public Usuario recuperaDadosUsuario() {
		return usuario;
	}
	
	public void alterarFuncionario(Usuario usuario) {
			this.entityManager.merge(usuario);
	}
}
